package com.casic.task;

import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.RandomUtil;
import cn.hutool.json.JSON;
import cn.hutool.json.JSONArray;
import cn.hutool.json.JSONObject;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import org.springframework.web.client.RestTemplate;

import java.util.Date;
import java.util.List;
import java.util.Random;

/**
 * @author xudezhi
 * @title: SendDataTask
 * @projectName iot-platform
 * @description: TODO
 * @date 2021/4/2217:03:44
 */
@Slf4j
@Component
public class SendDataTask {

    /**
     * restTemplate
     */
    RestTemplate restTemplate=new RestTemplate();



    /**
     * 接口数据
     */
    @Autowired
    DataApi dataApi;

    /**
     * 发送测试数据
     */
    @Scheduled(cron = "*/1 * * * * ?") //每秒钟一次
    public void sendData(){

        /**
         * 生成请求信息
         */
        JSONObject request=new JSONObject();
        request.put("iot",dataApi.iot); //网关
        request.put("accessKey",dataApi.accessKey); //秘钥
        request.put("equipment",dataApi.equipment); //设备
        //设备发数情况
        JSONArray data=new JSONArray();

        /**
         * 采集点数据
         */
        List<String> col=dataApi.k;//采集点名称集合
        for (int i = 0; i < col.size(); i++) {
            //发数数据
            JSONObject dataObj=new JSONObject();
            dataObj.put("k",col.get(i));
            if("state".equals(col.get(i))){
                dataObj.put("v",RandomUtil.randomInt(1,8)%4*1000+1000); //生成1000,2000,3000,4000状态随机数
            }else{
                //dataObj.put("v", RandomUtil.randomInt(1,500)); //1到500的随机数作为值
                if("postion".equals(col.get(i))){
                    dataObj.put("v","点石商务公园7号楼"); //位置信息
                }else if("temperature".equals(col.get(i))){
                    dataObj.put("v",RandomUtil.randomInt(20,100)); //位置信息
                }else  if("lock".equals(col.get(i))){
                    dataObj.put("v",String.valueOf(RandomUtil.randomInt(0,1))); //位置信息
                }else{
                    dataObj.put("v",String.valueOf(RandomUtil.randomInt(0,500))); //随机数
                }
            }
            dataObj.put("t",new Date().getTime());
            data.add(dataObj);
        }

//        //发数数据
//        JSONObject dataObj=new JSONObject();
//        dataObj.put("k","wd");
//        dataObj.put("v", RandomUtil.randomInt(1,500)); //1到500的随机数作为温度值
//        dataObj.put("t",new Date().getTime());
//        data.add(dataObj);
//        //发数数据，状态
//        dataObj=new JSONObject();
//        dataObj.put("k","state");
//        dataObj.put("v",RandomUtil.randomInt(1,8)%4*1000+1000); //生成1000,2000,3000,4000状态随机数
//        dataObj.put("t",new Date().getTime());
//        data.add(dataObj);
        //发数数据data
        request.put("data",data);

        JSONObject result=restTemplate.postForObject(dataApi.url,request,JSONObject.class);//设备发数
        log.info(DateUtil.formatDateTime(new Date())+"发数："+request+"响应："+result);
    }
}
